【问题标题】:Create computed column with string in formula用公式中的字符串创建计算列
【发布时间】:2011-04-29 13:04:38
【问题描述】:

我想在 SQL SERVER 中创建一个计算列并将公式设置为此

([Category] +  '.aspx?ID=' + [Post_ID])

虽然不工作......我错过了什么?

Category 和 Post_ID 是表中的当前列

【问题讨论】:

    标签: asp.net sql sql-server sql-server-2005 tsql


    【解决方案1】:

    你有吗

    SELECT [Category] +  '.aspx?ID=' + [Post_ID]
    FROM table
    

    ?

    试试

    SELECT CAST([Category] AS NVARCHAR(MAX)) + '.aspx?ID=' CAST([Post_ID] AS NVARCHAR(MAX))
    FROM table
    

    或根据列的数据类型指定最大大小。


    上面的答案很糟糕。不要在数据层上格式化。表示层上的格式,即在标记中。例如:

    <asp:HyperLinkField
        HeaderText="LinkHeader"
        DataNavigateUrlFormatString="{0}.aspx?ID={1}" 
        DataNavigateUrlFields="Category,Post_ID"
        DataTextField="LinkName" />
    

    (要正常工作,这还需要一个字段LinkName 存在于结果选择中)

    或

    <asp:Hyperlink runat= "server"
        Text='<%# DataBinder.Eval(Container.DataItem, "LinkName").ToString() %>' 
        NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Category").ToString() + ".aspx?ID=" + DataBinder.Eval(Container.DataItem, "Post_ID").ToString() />   
    

    【讨论】:

    【解决方案2】:

    我猜你可能错过了一个演员表。我同意这似乎不太可能成为计算列的候选者。

    create table #t
    (
    Category varchar(50),
    [Post_ID] int
    )
    
    alter table #t 
    add comp as ([Category] +  '.aspx?ID=' + cast([Post_ID] as varchar(10)))
    

    【讨论】:

    • 我认为创建这样的计算列是个坏主意,而且更好 - 只是在表示层上即时格式化数据
    • @abatishchev 我想不出这个专栏在任何情况下都是一个好主意。
    【解决方案3】:

    这实际上是在最后为我整理出来的.....

    NavigateUrl='<%# String.Format("{0}.aspx?ID={1}", DataBinder.Eval(Container.DataItem, "Category"), DataBinder.Eval(Container.DataItem, "Post_ID")) %>'
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多