标签: t-sql

0
推荐指数
1
解决办法
1504
查看次数

无法绑定多部分标识符 - 更新查询SQL Server 2005

SQL Server新手在这里.

UPDATE dbo.ObjectivesApproved  
SET dbo.ObjectivesApproved.VAP = 'Y'
WHERE ((dbo.Approved.Cri_Group In ('X01' ,'X02' ,'X03' ,'X04' ,'X05' ,'X07' ,'X08' ,'X09' ,'X10' ,'X11' ,'X12' ,'X13' ,'X14')))
Run Code Online (Sandbox Code Playgroud)

出现以下错误

The multi-part identifier "dbo.Approved.Cri_Group" could not be bound.
Run Code Online (Sandbox Code Playgroud)

是什么导致错误?

更新:上述查询是试错的结果.我正在更新一个Access应用程序到SQL服务器,并与SQL略有不同的方言有一些麻烦

这是我原来的查询.

UPDATE dbo.Approved 
INNER JOIN dbo.ObjectivesApproved ON dbo.Approved.ID = dbo.ObjectivesApproved.ID 
SET dbo.ObjectivesApproved.VAP = 'Y'
WHERE ((dbo.Approved.Cri_Group 
In ('X01' ,'X02' ,'X03' ,'X04' ,'X05' ,'X07' ,'X08' ,'X09' ,'X10' ,'X11' ,'X12' ,'X13' ,'X14')));
Run Code Online (Sandbox Code Playgroud)

这会产生错误 - 关键字"INNER"附近的语法不正确

谢谢

sql t-sql sql-server-2005

0
推荐指数
1
解决办法
7320
查看次数

如何创建一个模式绑定函数,该函数计算xml中的节点,然后能够将此结果保存在列中

我有一个xml列,我想在相邻的列中保留一个节点计数.

例如,在下面给出的xml中,我有3个节点a,所以我想输出它.

但是,我遇到的问题是我无法创建一个通用的模式绑定函数,该函数将使用@xml和@nodeName以返回指定节点的计数.

create function dbo.fnXmlCount_a (@xml xml) 
returns int with schemabinding
as begin
return (@xml.value('count(//a)', 'int'))
end

declare @xml xml;
set @xml = '
<r>
 <a></a>
 <b></b>
 <a></a>
 <c>
  <a></a> 
 </c>
</r>'

select dbo.fnXmlCount_a(@xml) aCount
Run Code Online (Sandbox Code Playgroud)

最后一次操作的结果是:

aCount
3
Run Code Online (Sandbox Code Playgroud)

然后我在该表上创建一个具有此xml字段的列,如下所示:

alter table [XmlTable] add column [aCount] as (dbo.fnXmlCount_a([xml])) persisted
Run Code Online (Sandbox Code Playgroud)

但我真正想做的是:

alter table [XmlTable] add column [aCount] as (dbo.fnXmlNodeCount([xml], 'a')) persisted
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新:

我们都知道这//很慢,所以如果你能弄清楚如何通过这条路径来搜索另一个变量,那就太好了.默认情况下,此搜索路径将是//.

sql t-sql sql-server sql-server-2005 sql-server-2008

0
推荐指数
1
解决办法
7948
查看次数

从SQL Server过程创建dll

我在SQL Server上有程序!现在,是否可以从该过程创建dll,如果可以,我该怎么做?

谢谢!

sql t-sql sql-server sql-server-2008

0
推荐指数
1
解决办法
1762
查看次数

穷人的SQL Pivot.在一行中将问题列为每个用户的列和答案

当前查询:

SELECT order_id AS OrderNumber, ordName, ordLastName, question, answer 
FROM cart_survey 
JOIN orders 
    ON cart_survey.order_id=orders.ordID 
JOIN survey_answers 
    ON survey_answers.id=cart_survey.answer_id 
JOIN survey_questions 
    ON survey_questions.id=cart_survey.question_id
Run Code Online (Sandbox Code Playgroud)

结果:

OrderNumber ordName ordLastName question                        answer
8591        Larry   Marshburn   Type of Surgery:                Colostomy  
8591        Larry   Marshburn   Month of Surgery:               2
8591        Larry   Marshburn   Year of surgery:                2010
8591        Larry   Marshburn   Current Ostomy System Brand:    ConvaTec  
8591        Larry   Marshburn   Degree of Satisfaction:         Somewhat Satisfied  
8593        Melvin  Belcher     Type of Surgery:                Urostomy
8593        Melvin  Belcher     Month of …

t-sql

0
推荐指数
1
解决办法
3767
查看次数

关于聚合函数的SQL SUM

也许我试图为了自己的利益而过于聪明,我可能会使用标量变量来解决这个问题.我正在尝试从子查询中添加1到我的输出;

INSERT INTO bookrevisiontbl (revisionnum, bookdate)
SELECT SUM(MAX(revisionnum) + 1), GETDATE() FROM bookrevisiontbl_tbl
Run Code Online (Sandbox Code Playgroud)

但是会发生以下错误

无法对包含聚合或子查询的表达式执行聚合函数.

这个查询是否可行,并且可以维护

sql t-sql

0
推荐指数
1
解决办法
298
查看次数

如何在SQL Server 2005中更新列时进行日志记录?

我遇到了数据库的问题,似乎列的更新值错误.目前,我不知道哪个程序正在执行此操作.找到这个的最佳方法是什么?可以帮助我的事情是:

  • 应用程序名称
  • 执行应用程序的主机
  • 确切的SQL语句.

交易日志可以帮助我吗?我能以某种方式编写日志记录触发器吗?

帮助将不胜感激.

t-sql logging sql-server-2005

0
推荐指数
1
解决办法
110
查看次数

从另一个表插入常量加值的存储过程

如果我们想在插入的记录中Col3包含一个常量字符串'Foo',如何修改以下存储过程?

INSERT Table2
       (Col1,
       Col2,
       Col3)
SELECT T1Col1,
       T1Col2
FROM   Table1
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server stored-procedures

0
推荐指数
1
解决办法
1045
查看次数

从名称作为变量传递的表中进行选择

我正在尝试编写一个简单的存储过程,它接受三个参数'数据库名称一个','数据库名称二'和'表名称'.然后,sql将为每个数据库中的已定义表执行行计数并存储它.

零碎的工作我遇到了第一个你不能做的问题

select * from @tablename
Run Code Online (Sandbox Code Playgroud)

我知道你可以在exec命令中使用动态sql,但这并不理想,因为我无法返回值.

以下示例看起来应该可以工作但不会.

declare @tablename as nvarchar(500)
declare @sqlstring as nvarchar(500)
declare @parmdefinition as nvarchar(500)
declare @numrows as bigint

set @tablename = N'dummy_customer'

set @parmdefinition = N'@tablenameIN nvarchar(500), @numrowsOUT as bigint OUTPUT'

select @sqlstring = 'select @numrowsOUT = count(*) from @tablenameIN'

select @sqlstring

exec sp_executesql @sqlstring, @parmdefinition, @tablenameIN = @tablename, @numrowsOUT = @numrows OUTPUT

select @numrows
Run Code Online (Sandbox Code Playgroud)

给出的错误信息是

Msg 1087, Level 16, State 1, Line 1
Must declare the table variable "@tablenameIN".
Run Code Online (Sandbox Code Playgroud)

目前使用的是SQL Server …

sql t-sql sql-server-2008

0
推荐指数
1
解决办法
2209
查看次数

在具有不同类型的列上使用日期函数

是否可以在varchar列上使用类似DATEADD()或DATEPART()的函数,该函数可能包含也可能不包含类似日期时间的内容?

目前我正在尝试使用WHERE子句来仅选择此列中具有日期时间值的行并获得通常的算术溢出错误.

我可以执行某种操作来提取日期时间值并将它们放在临时表中,但我对此很好奇.

SELECT DATEPART(wk, DateCreated) FROM tblOrders WHERE colType = 'datetime'
Run Code Online (Sandbox Code Playgroud)

不要担心桌子设计,它没有那么糟糕.

sql t-sql sql-server sql-server-2005

0
推荐指数
1
解决办法
57
查看次数